#pragma once

#include <vex/iterable/contract/range.h>

namespace vex { namespace functional { namespace contract {

    /// <summary>
    /// Model of invoker_range for multicast contracts. Implementations 
    /// are supposed to invoke the stored functor on each call to 
    /// reducer::front(). Extends one_pass iterable.
    /// </summary>
    template<class TRet> struct VEX_ABSTRACT invoker_range
        : public iterable::contract::range<iterable::one_pass, TRet>
    {
        VEX_PROTECT_CONTRACT(invoker_range);
    };
}}}